package core.api;

import config.DSConfig;
import okhttp3.MediaType;

import java.util.concurrent.CompletableFuture;

public interface ApiClient {

    <T> T get(String path, Class<T> responseType, Object... uriVariables);

    <T> T post(String path, Object body, MediaType mediaType, Class<T> responseType, Object... uriVariables);

    <T> T put(String path, Object request, MediaType mediaType,Class<T> responseType, Object... uriVariables);

    <T> T delete(String path,Object body,MediaType mediaType,Class<T> responseType, Object... uriVariables);

    <T> CompletableFuture<T> getAsync(String path, Class<T> responseType, Object... uriVariables);

    <T> CompletableFuture<T> postAsync(String path, Object requestBody, MediaType mediaType,
                                       Class<T> responseType, Object... uriVariables);

    DSConfig getConfig();
}
